The present invention relates generally to programming techniques and systems and, more particularly, to programming techniques and systems which associate system events with program instructions.
The power of computers to process data continues to grow at a rapid pace. As computing power increases, software applications which are developed for new computing platforms become more sophisticated and more complex. It is not uncommon for teams of software developers to develop applications having hundreds of thousands, or even millions, of lines of software code. With the additional complexity comes additional challenges in terms of, for example, debugging difficulty. In addition to actual syntax errors, debugging can also refer to performance evaluation and improvement, e.g., to identify portions of the software code which can be improved so that the program as a whole runs faster.
Various techniques can be used to detect, and identify, the source(s) of performance problems in computer systems. According to one technique, a profile can be generated which monitors the execution time associated with various code portions (routines) of a program. Those routines having a relatively high percentage of the overall execution time can then be flagged for performance review. This technique assumes, sometimes erroneously, that performance problems can be identified by inspecting the routines with the highest percent of execution time.
Another technique for evaluating program performance employs performance counters in processor hardware to count the number of inefficient operations of a specific kind (that kind being decided by the user) performed by the processor during execution of a program. Since the processor has access to a program counter, which provides a numeric index to program instructions, individual instructions causing problems may be identified. This method, however, is limited to detecting problems occurring within the processor and not on a system-wide basis since only the processor has access to the program counter. Thus, for example, inefficiencies associated with program instructions which are largely executed outside of the processor cannot be easily identified using such techniques. Using performance counters in system components other than the processor is problematic since it is then difficult (or impossible) to correlate inefficiencies with specific program instructions since other system components typically do not have access to the program counter.
Accordingly, it would be desirable to provide systems and methods for identifying and associating performance problems with program instructions on a system-wide basis.